package edu.hrbu.spring.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import javax.sql.DataSource;

/**
 * @author 徐登宇
 */
@Configuration // 声明这是一个Spring配置类（相当于Spring的配置文件）
@ComponentScan("edu.hrbu.spring") // 相当于配置文件中的 注解包扫描
@EnableTransactionManagement // 相当于配置文件中的 开启事务注解驱动
public class SpringConfig {

    // 配置Druid数据源
    @Bean(name = "dataSource")
    // 这个注解作用是，声明这个类返回的Bean会被纳入IoC容器管理，并且这个Bean的名字叫做 Bean注解中name的值
    public DataSource getDataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/pond-spring");
        dataSource.setUsername("root");
        dataSource.setPassword("Xu08052002@");
        return dataSource;
    }

    // 配置jdbcTemplate
    @Bean(name = "jdbcTemplate")
    public JdbcTemplate getJdbcTemplate(DataSource dataSource) { // 会自动注入
        JdbcTemplate jdbcTemplate = new JdbcTemplate();
        jdbcTemplate.setDataSource(dataSource);
        return jdbcTemplate;
    }

    // 配置DataSourceTransactionManagement
    @Bean(name = "transactionManager")
    public DataSourceTransactionManager getDataSourceTransactionManager(DataSource dataSource) {
        DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager();
        dataSourceTransactionManager.setDataSource(dataSource);
        return dataSourceTransactionManager;
    }

}
